// 引入mathjs
import * as math from 'mathjs'
// 写一个方法,解决小数精度丢失的问题
// 运算	方法名	参数	备注
// 加	math.add(a,b,c,…)	参数个数>=2	得到几个数字的和
// 减	math.subtract(a,b)	参数个数=2	得到 a-b 的结果, 不可连减
// 乘	math.multiply(a,b,c,…)	参数个数>=2	得几个参数的乘积
// 除	math.divide(a,b)	参数个数=2	得到 a/b 的结果 ，不可连除
// 转换为bigNumber类型	math.bignumber(a)		浮点数，进行运算时，转换成bigNumber才能保证得到精确的结果
// 转换为数字类型	math.number(a)		bignumber为对象，此方法可以获取对象中的数字部分
// -------------------------------------------------------------------------
// 第一个参数传  加：    add  
//              减      subtract 
//              乘      multiply  
//              除      divide  
// 第二个参数可传多个参数，但除法和减法只能传2个数字
function precision(type,...args){
    // 如果传进来的参数小于2个数 ，就return
    if(args.length<2) return  console.log('传入需要计算的数不能小于2个数');
    console.log('type',type);
    console.log('args',args);
    let arr=[]
    args.forEach(v=>{
      let a=math.bignumber(v)// 使用math.js转换数据类型，才可保证计算的精确性
      arr.push(a)
    })
    let result=0
    switch (type){
      // 加
      case 'add':
      result = math.number(math.add(...arr)) 
        break;
      // 减
      case 'subtract':
        if(args.length==2) {
          result = math.number(math.subtract(...arr))
        }else{
          console.log('减法传入需要计算的数必须2个数');
        }
        break;
      // 乘
      case 'multiply':
      result = math.number(math.multiply(...arr)) 
        break;
      // 除
      case 'divide':
        if(args.length==2) {
           result = math.number(math.divide(...arr)) 
        }else{
          console.log('除法传入需要计算的数必须2个数');
        }
        break;
    }
    return result
}

export default precision
